From 4a281edc872be418824fabf07b074b1a449a2e7a Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Mon, 17 Sep 2012 11:30:21 +0200 Subject: [PATCH] stylecontext: Only create transitions conditionally While regular animations should always be created, transitions should not. This patch allows to express this by passing NULL as the values to transition from. It also adds a gtk_style_context_should_create_transitions() function that returns TRUE when transitions should be created. --- gtk/gtkcsscomputedvalues.c | 3 ++- gtk/gtkstylecontext.c | 23 ++++++++++++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/gtk/gtkcsscomputedvalues.c b/gtk/gtkcsscomputedvalues.c index 7ec040ea58..cd2f66b2d6 100644 --- a/gtk/gtkcsscomputedvalues.c +++ b/gtk/gtkcsscomputedvalues.c @@ -492,7 +492,8 @@ _gtk_css_computed_values_create_animations (GtkCssComputedValues *values, GtkCssComputedValues *source, GtkStyleContext *context) { - gtk_css_computed_values_create_css_transitions (values, timestamp, source); + if (source != NULL) + gtk_css_computed_values_create_css_transitions (values, timestamp, source); gtk_css_computed_values_create_css_animations (values, timestamp, context); } diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c index e42ac88b12..b06d4d868d 100644 --- a/gtk/gtkstylecontext.c +++ b/gtk/gtkstylecontext.c @@ -3077,6 +3077,27 @@ gtk_style_context_needs_full_revalidate (GtkStyleContext *context, return FALSE; } +static gboolean +gtk_style_context_should_create_transitions (GtkStyleContext *context) +{ + GtkStyleContextPrivate *priv; + gboolean animate; + + priv = context->priv; + + if (priv->widget == NULL) + return FALSE; + + if (!gtk_widget_get_mapped (priv->widget)) + return FALSE; + + g_object_get (gtk_widget_get_settings (context->priv->widget), + "gtk-enable-animations", &animate, + NULL); + + return animate; +} + void _gtk_style_context_validate (GtkStyleContext *context, gint64 timestamp, @@ -3144,7 +3165,7 @@ _gtk_style_context_validate (GtkStyleContext *context, _gtk_css_computed_values_create_animations (data->store, timestamp, - current->store, + gtk_style_context_should_create_transitions (context) ? current->store : NULL, context); if (_gtk_css_computed_values_is_static (data->store)) change &= ~GTK_CSS_CHANGE_ANIMATE; -- 2.30.2